home *** CD-ROM | disk | FTP | other *** search
/ CD Exchange / CD Exchange - Volume 1.iso / graphics / utils / videotracker / develop / source / spr.s < prev    next >
Text File  |  1992-02-05  |  3KB  |  190 lines

  1. control:
  2.     
  3.     jsr    start2
  4.     jsr    start1
  5.     rts
  6.  
  7. start1:
  8.     move.l    #sprdat,a1    
  9.     move.l    #destination,a2
  10.     clr.l    d0
  11.     move.l    #6-1,d7
  12. loop1a:
  13.     move.l    a2,a0
  14.     move.l    #0,(a1)+
  15.     move.l    #11-1,d2
  16. loop2:
  17.     move.w    (a0),(a1)+
  18.     move.w    200*40(a0),(a1)+
  19.     add.l    #40,a0
  20.     dbra    d2,loop2
  21.     move.l    #0,(a1)+
  22.     add.l    #2,a2
  23.     dbra    d7,loop1a
  24.     rts
  25.  
  26. start2:
  27.     jsr    iff_search
  28.     jsr    planes_1
  29.     jsr    unpacker
  30.     rts
  31.  
  32. planes_1:
  33.     move.l    decrunched_data,a0
  34.     move.l    #planes,a1
  35.     clr.l    d0
  36.     move.w    width_bytes,d0
  37.     muls    height,d0
  38. planes_2:
  39.     move.l    a0,(a1)
  40.     add.l    #4,a1
  41.     add.l    d0,a0
  42.     cmp.l    #planes+20,a1
  43.     bne    planes_2
  44.     rts
  45.  
  46. unpacker:
  47.     move.l    #planes,a2
  48.     move.l    body_chunk,a0
  49.     add.l    #4,a0
  50.     move.l    (a0)+,d7
  51.     move.l    a0,a3
  52.     add.l    d7,a3
  53.     move.w    planes_num,d2
  54.     addq.w    #1,d2
  55. unp_loop:
  56.     cmp.l    a3,a0
  57.     bge    unpack_end
  58.     clr.w    d3
  59. pic_loop1:
  60.     move.w    d3,d4
  61.     mulu    #4,d4
  62.     move.l    (a2,d4),a5
  63.     jsr    unpack_row
  64.     move.l    a5,(a2,d4)
  65.     addq.w    #1,d3
  66.     cmp.w    d2,d3
  67.     blt    pic_loop1
  68.     move.l    bmhd_chunk,a5
  69.     andi.b    #1,17(a5)
  70.     beq    unp_loop
  71.     move.l    #mask_dummy,a5
  72.     jsr    unpack_row
  73.     bra    unp_loop
  74. unpack_row:
  75.     move.l    d2,-(sp)
  76.     move.w    width_bytes,d2
  77. unp_loop1:
  78.     tst.w    d2
  79.     beq    unpack_row_end
  80.     clr.w    d0
  81.     tst.w    comp_flag
  82.     bne    unp_comp
  83.     move.w    width_bytes,d0
  84.     subq.w    #1,d0
  85.     bra    unp_loop2
  86. unp_comp:
  87.     move.b    (a0)+,d0
  88.     bmi    packed
  89. unp_loop2:
  90.     move.b    (a0)+,(a5)+
  91.     subq.w    #1,d2
  92.     dbra    d0,unp_loop2
  93.     bra    unp_loop1
  94. packed:
  95.     neg.b    d0
  96.     move.b    (a0)+,d1
  97. unp_loop3:
  98.     move.b    d1,(a5)+
  99.     subq.w    #1,d2
  100.     dbra    d0,unp_loop3
  101.     bra    unp_loop1
  102. unpack_row_end:
  103.     move.l    (sp)+,d2
  104.     rts
  105. unpack_end:
  106.     rts
  107.  
  108. iff_search:
  109.     move.l    crunched_data,a0
  110.     add.l    #12,a0
  111.     move.l    a0,bmhd_chunk
  112.     move.l    4(a0),d0
  113.     add.l    d0,a0
  114.     add.l    #8,a0
  115.     move.l    a0,cmap_chunk
  116. iff_l1:
  117.     move.l    4(a0),d0
  118.     add.l    d0,a0
  119.     add.l    #8,a0
  120.     move.l    #'BODY',d1
  121.     cmp.l    (a0),d1
  122.     bne    iff_l1
  123.     move.l    a0,body_chunk
  124.     move.l    bmhd_chunk,a2
  125.     move.l    a2,a1
  126.     add.l    #16,a1
  127.     clr.w    d0
  128.     move.b    (a1),d0
  129.     cmp.w    #6,d0
  130.     blt    iff_cont
  131.     move.w    #6,d0
  132. iff_cont:
  133.     move.l    decrunched_data,a0
  134.     move.w    d0,8(a0)
  135.     subq.w    #1,d0
  136.     move.w    d0,planes_num
  137.     move.l    a2,a1
  138.     add.l    #18,a1
  139.     move.b    (a1),comp_flag
  140.     move.l    a2,a1
  141.     add.l    #8,a1
  142.     clr.l    d0
  143.     move.w    (a1)+,d0
  144.     move.w    d0,width
  145.     clr.l    d3
  146.     cmp.w    #640,d0
  147.     blt    iff_cont3
  148.     or.w    #$8000,d3
  149. iff_cont3:
  150.     move.w    d0,d1
  151.     and.w    #7,d1
  152.     beq    iff_cont2
  153.     or.w    #8,d0
  154. iff_cont2:
  155.     divu    #8,d0
  156.     move.w    d0,width_bytes
  157.     clr.l    d0
  158.     move.w    (a1),d0
  159.     move.w    d0,height
  160.     cmp.w    #400,d0
  161.     blt    iff_cont4
  162.     or.w    #4,d3
  163. iff_cont4:
  164.     rts
  165.  
  166. crunched_data:    DC.L    source
  167. decrunched_data:    DC.L    destination
  168.  
  169. bmhd_chunk:        DC.L    0
  170. cmap_chunk:        DC.L    0
  171. body_chunk:        DC.L    0
  172.  
  173. planes:        ds.L    10
  174.  
  175. width:        DC.W    0
  176. height:        DC.W    0
  177.  
  178. planes_num:        DC.W    0
  179. comp_flag:        DC.W    0
  180. width_bytes:    DC.W    0
  181.  
  182. mask_dummy:        ds.B    128
  183.  
  184.  
  185. source        incbin    'h:asm/psychadelic/p/spr.pic'
  186.         cnop    0,2
  187. destination        ds.b    2*200*40
  188. sprdat        ds.b    6*52
  189. sprdat.e
  190.